package com.haiqiu.tools.auth.inspect;

import java.util.Map;

/**
 * @author HaiQiu
 * @since 2023/3/16
 */
public interface TokenService<T> {

    /**
     * 创建token
     * @param  userId 用户ID
     * @return 返回创建的token
     */
    String createToken(Long userId);

    /**
     * 创建token
     * @param t 泛型数据，可以为一个用户信息的实体，包含用户id，用户名等信息
     * @return 返回创建的token
     */
    String createToken(T t);

    /**
     * 创建token
     * @param map 数据，可以为一个用户信息的，包含用户id，用户名等信息
     * @return 返回创建的token
     */
    String createToken(Map<String,Object> map);

    /**
     * 根据token获取用户ID
     * @param token token
     * @return 用户ID
     */
    Long getUserId(String token);


    /**
     * 获取用户信息
     * @param token 用户token
     * @param t 转换的类
     * @return 转换用户的信息
     */
    T getUserDetail(String token,Class<T> t);

    /**
     * 检查token是否已经过期
     * @param token token
     * @return 是否过期
     */
    boolean checkToken(String token);
}
